package com.itheima.exception;


import cn.hutool.core.util.ReUtil;
import com.itheima.pojo.Result;
import lombok.extern.slf4j.Slf4j;
import org.springframework.dao.DuplicateKeyException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

@Slf4j
@RestControllerAdvice       //表示该类是一个异常处理类
public class GlobalExceptionHandler {

//    @ExceptionHandler       //表示该方法是一个处理异常的方法,默认处理形参中异常类型及其子类
//    public Result doException(Exception e) {
//        log.error("系统异常：{}", e.getMessage(), e);
//        return Result.error("系统正在维护升级,请稍后重试");
//    }

    /**
     * 处理新增信息的表单项唯一的异常（填写表单项信息有唯一约束，不能填写相同信息）
     * @param d
     * @return
     */
    @ExceptionHandler       //表示该方法是一个处理异常的方法,默认处理形参中异常类型及其子类
    public Result doException(DuplicateKeyException d) {
        log.error("系统异常：{}", d.getMessage(), d);
//        使用hutool工具类调用正则表达式截取目标元素
        String message = ReUtil.getGroup0("'\\w*", d.getMessage());
//        返回异常信息
        return Result.error(message+"重复了");
    }


    /**
     * 处理删除时的异常（无法删除班级下有学员的班级）
     * @param d
     * @return
     */
    @ExceptionHandler       //表示该方法是一个处理异常的方法,默认处理形参中异常类型及其子类
    public Result doException(CustomException d) {
        log.error("系统异常：{}", d.getMessage(), d);
//        使用hutool工具类调用正则表达式截取目标元素
//        返回异常信息
        return Result.error(d.getMessage());
    }

}
